package com.liwt.imageeditor;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
	/** 选择图片按钮 */
	private Button selectImageBt = null;
	/** 拍照按钮 */
	private Button takePhotoBt = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 初始化界面
		initView();
	}

	/**
	 * 初始化界面
	 */
	private void initView() {
		// 选择图片
		selectImageBt = (Button) findViewById(R.id.main_select_image);
		// 拍摄照片
		takePhotoBt = (Button) findViewById(R.id.main_take_photo);
		selectImageBt.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
				intent.addCategory(Intent.CATEGORY_OPENABLE);
				intent.setType("image/*");
				/**
				 * Intent.createChooser 大致是这样的，当系统中有多个应用程序实现的是同一功能时(比如说音乐播放器)，
				 * 当我们点击一个MP3文件时就要显示一个列表对话框提示用户以那个程序打开
				 */
				startActivityForResult(
						Intent.createChooser(intent, "使用以下方式打开"), 1);
			}
		});
		takePhotoBt.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra("action", "takephoto");
				intent.setClass(MainActivity.this, DrawPhoto.class);
				startActivity(intent);
			}
		});
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == RESULT_OK) {
			// 当从选择图片的界面返回
			if (requestCode == 1) {
				if (data == null) {
					return;
				}
				// 获得返回的图片的Uri
				Uri uri = data.getData();
				if (uri == null) {
					return;
				}
				// 设置编辑后图片保存的路径
				String savePath = Util.IMAGE_PATH;
				File tempFile = new File(savePath);
				if (tempFile != null && !tempFile.exists()) {
					tempFile.mkdirs();
				}

				// 获得图片的一些基本信息
				Cursor cursor = getContentResolver().query(uri, null, null,
						null, null);
				cursor.moveToFirst();
				// 图片文件名
				String imgName = cursor.getString(3);
				ContentResolver cr = getContentResolver();
				try {
					// 提醒系统及时回收
					System.gc();
					BitmapFactory.Options newOpts = new BitmapFactory.Options();
					// 开始读入图片，此时把options.inJustDecodeBounds 设回true了
					newOpts.inJustDecodeBounds = false;
					// 表示16位位图
					newOpts.inPreferredConfig = Bitmap.Config.RGB_565;
					newOpts.inInputShareable = true;
					// 设置图片可以被回收
					newOpts.inPurgeable = true;

					// 新的图片
					String fileName = savePath + File.separator + imgName;
					File file = new File(fileName);
					// 如果当前目录中已有该图片了，删除之
					if (file.exists()) {
						file.delete();
					}
					Bitmap bitmap = BitmapFactory.decodeStream(
							cr.openInputStream(uri), null, newOpts);
					BufferedOutputStream bos = new BufferedOutputStream(
							new FileOutputStream(file));
					// 将图片压缩到流中
					bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bos);
					bos.flush();// 输出
					bos.close();// 关闭
					bitmap.recycle();// 回收数据
					System.gc(); // 提醒系统及时回收
					Message msg = handler.obtainMessage();// 获取设置一个信息保存点
					msg.what = 0;
					msg.getData().putString("image", fileName);
					handler.sendMessage(msg);
				} catch (Exception e) {
					e.printStackTrace();
				}

			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 0:
				String fileName = msg.getData().getString("image");
				Intent intent = new Intent();
				intent.putExtra("action", fileName);
				// 跳转到图片编辑界面
				intent.setClass(MainActivity.this, DrawPhoto.class);
				startActivity(intent);
				break;
			case 1:
				break;
			default:
				break;
			}
		}

	};
}
